home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / fb386 / tool / mondu / file_sel.bas < prev    next >
BASIC Source File  |  1995-01-02  |  17KB  |  436 lines

  1. 1000 '  ウィンドウ描画プログラム発展型ファイルセレクタ                      80
  2. 1010  CLEAR ,,100000,40000,10000,20000:DEF FONT "システム   12ドット"
  3. 1020  DEFINT A-Z:COLOR ,7,%8:CLS
  4. 1029 '  短形領域(box(i,0),box(i,1))-(box(i,2),box(i,3))が点(x,y)を含むか
  5. 1030  DEF FNPB(I)=BOX(I,0)=<MOUSE(0)+WINDOW(0) AND MOUSE(0)+WINDOW(0)=<BOX(I,2) AND BOX(I,1)=<MOUSE(1)+WINDOW(1) AND MOUSE(1)+WINDOW(1)=<BOX(I,3)
  6. 1049 '  F-BASIC386用REXユーティリティ(作者:OcToh[オクト])を読み込む
  7. 1050  LOADM "bas_lib.rex",0
  8. 1059 '  アイコンデータ
  9. 1060  ICN_CL&(0)=&H80F0FF:ICN_CL&(1)=&H80A0AA:ICN_CL&(2)=&H80A0AA
  10. 1061  ICN_CL&(3)=&H80A0AA:ICN_CL&(4)=&H80A0AA:ICN_CL&(5)=&H80A0AA
  11. 1062  ICN_UP&(0)=&H3C180000:ICN_UP&(1)=&H00FFFF7E
  12. 1063  ICN_DW&(0)=&H7EFFFF00:ICN_DW&(1)=&H0000183C
  13. 1200 '   パレット設定
  14. 1201 PALETTE  1,[144, 64,224]:PALETTE  2,[112,160,80]:PALETTE  3,[192,240,128]
  15. 1204 PALETTE  4,[144,144,144]:PALETTE  5,[144, 32,96]:PALETTE  6,[192,192,192]
  16. 1207 PALETTE  7,[ 96, 96, 96]:PALETTE  8,[ 48, 48,48]:PALETTE  9,[160,176,240]
  17. 1210 PALETTE 10,[ 96,240, 96]:PALETTE 11,[208, 80,64]:PALETTE 12,[ 64, 64, 64]
  18. 1213 PALETTE 13,[208,180,240]:PALETTE 14,[176,224,48]:PALETTE 15,[240,240,240]
  19. 1300 '  マウス表示
  20. 1310  MOUSE 0
  21. 1329 '  andパターン
  22. 1330 M_AND$(0)=CHR$(&H7F,&HFF,&H3F,&HFF,&H1F,&HFF,&HF,&HFF,7,&HFF,3,&HFF,1,&HFF,0,&HFF,0,&H7F,0,&H3F,0,&H1F,0,&H3F,0,&HFF,1,&HFF,&H38,&HFF,&HF9,&HFF)
  23. 1331 M_AND$(1)=CHR$(&HFF,&HFE,&HFF,&HFC,&HFF,&HF8,&HFF,&HF0,&HFF,&HE0,&HFF,&HC0,&HFF,&H80,&HFF,0,&HFE,0,&HFC,0,&HF8,0,&HFC,0,&HFF,0,&HFF,&H80,&HFF,&H1C,&HFF,&H9F)
  24. 1332 M_AND$(2)=CHR$(&HFC,&H7F,&H38,&H7F,0,&H7F,0,&HFF,0,&H3F,0,&H1F,0,&H3F,0,&H7F,0,&HFF,1,&HFF,3,&HFF,7,&HFF,&HF,&HFF,&H1F,&HFF,&H3F,&HFF,&H7F,&HFF)
  25. 1333 M_AND$(3)=CHR$(&HFF,&H1F,&HFF,&H1C,&HFF,&H80,&HFF,0,&HFC,0,&HF8,0,&HFC,0,&HFE,0,&HFF,0,&HFF,&H80,&HFF,&HC0,&HFF,&HE0,&HFF,&HF0,&HFF,&HF8,&HFF,&HFC,&HFF,&HFE)
  26. 1334 '
  27. 1339 '  ドットパターン
  28. 1340 M_DOT$(0)=CHR$(0,0,0,0,&H40,0,&H60,0,&H30,0,&H58,0,&H3C,0,&H5E,0,&H2F,0,&H5F,&H80,&H26,0,&H54,0,&H46,0,4)
  29. 1341 M_DOT$(1)=CHR$(0,0,0,0,0,2,0,6,0,&HE,0,&H1E,0,&H3E,0,&H7E,0,&HFE,1,&HFE,0,&H7E,0,&H2E,0,&H62,0,H60)
  30. 1342 M_DOT$(2)=CHR$(0,0,3,0,&H43,0,&H66,0,&H56,0,&H2A,&H80,&H55,0,&H2A,0,&H54,0,&H28,0,&H50,0,&H20,0,&H40)
  31. 1343 M_DOT$(3)=CHR$(0,0,0,&H40,0,&H20,0,&H32,0,&H1E,0,&HBE,1,&H5E,0,&HAE,0,&H5E,0,&H2E,0,&H16,0,&HA,0,6,0,2)
  32. 1344 '
  33. 1350  MOUSE 2,M_AND$(0),M_DOT$(0)
  34. 1360  MOUSE 1,312,232,1
  35. 1999 '  ウィンドウ情報の設定
  36. 2000  WINSIGN$="Tiff 読み込み"
  37. 2001  WININF(0)=100:WININF(1)=50:WININF(2)=240:WININF(3)=189
  38. 2002  BOXNUM=16:DIM BOX(BOXNUM,3)
  39. 2003  BOX(15,0)=1:BOX(15,1)=1:BOX(15,2)=238:BOX(15,3)=187
  40. 2004  BOX(16,0)=0:BOX(16,1)=0:BOX(16,2)=240:BOX(16,3)=189
  41. 2099 '
  42. 2100  GOSUB*WINDOW
  43. 2110  MOUSE 5
  44. 2120  IF RIGHT$(FILENAME$,4)=".TIF" THEN LOAD@ FILENAME$
  45. 2130  END
  46. 9999 '
  47. 10000 *WINDOW
  48. 10010  DIM WINBUF(((WININF(2)\8+1)*(WININF(3)+1)*4+1)\2)
  49. 10011  DIM FILEN$(999),FILEN(32)
  50. 10020 *WIN_DASH
  51. 10030  WINDOW(-WININF(0),-WININF(1))-(639-WININF(0),479-WININF(1))
  52. 10040  GET@A(WININF(0),WININF(1))-(WININF(2)+WININF(0),WININF(3)+WININF(1)),WINBUF
  53. 10099 '  枠組み
  54. 10100  LINE(0,0)-(WININF(2)  ,WININF(3)  ),PSET,,BF,7
  55. 10110  LINE(0,0)-(WININF(2)-1,WININF(3)-1),PSET,,B
  56. 10120  LINE(0,0)-(120,16),PSET,,BF
  57. 10130  LINE(120,0)-(WININF(2)-1,16),PSET,,BF,%9
  58. 10140  SYMBOL(24,3),WINSIGN$,.75!,.75!,7
  59. 10149 '  put@座標は別扱い(WINDOWにとらわれないため)
  60. 10150  BOX(0,0)=2:BOX(0,1)=2:BOX(0,2)=13:BOX(0,3)=13
  61. 10160  PUT@(2-WINDOW(0),2-WINDOW(1))-(13-WINDOW(0),13-WINDOW(1)),ICN_CL&,,7
  62. 10169 '  ディレクトリ
  63. 10170  LINE(8,20)-STEP(89,17),PSET,,B
  64. 10189 '  UP
  65. 10190  BOX(10,0)=100:BOX(10,1)=20:BOX(10,2)=115:BOX(10,3)=37
  66. 10200  LINE(100,20)-STEP(15,17),PSET,,B
  67. 10210  CONNECT(103,26)-STEP(4,-4)-STEP(4,4)
  68. 10220  SYMBOL(102,24),"up",.75!,.75!
  69. 10229 '  DOWN  118
  70. 10230  BOX(11,0)=123:BOX(11,1)=20:BOX(11,2)=228:BOX(11,3)=35:B=11:GOSUB*FR_EL1
  71. 10240  SYMBOL(126,22),"ディレクトリ移動",.75!,.75!
  72. 10249 '  ファイル
  73. 10250  BOX(3,0)=8:BOX(3,1)=40:BOX(3,2)=97:BOX(3,3)=183
  74. 10260  LINE(8,40)-STEP(89,143),PSET,,B
  75. 10269 '  ロール・バー
  76. 10270 IF FILENUM=0 THEN
  77. 10280  BOX(5,0)=101:BOX(5,2)=114:BOX(5,1)=41:BOX(5,3)=152
  78. 10290  BOX(6,0)=101:BOX(6,2)=114:BOX(6,1)=41:BOX(6,3)=152
  79. 10295  BOX(9,0)=100:BOX(9,1)=40:BOX(9,2)=115:BOX(9,3)=183
  80. 10300  LINE(100,40)-(115,153),PSET,,B:B=5:GOSUB*MAKE_S
  81. 10305 ELSE
  82. 10310  B=1:GOSUB*BAR_D
  83. 10315 ENDIF
  84. 10320  BOX(7,0)=101:BOX(7,2)=114:BOX(7,1)=154:BOX(7,3)=167
  85. 10330  LINE(100,153)-(115,168),PSET,,B:B=7:GOSUB*MAKE_S
  86. 10340  BOX(8,0)=101:BOX(8,2)=114:BOX(8,1)=169:BOX(8,3)=182
  87. 10350  LINE(100,168)-(115,183),PSET,,B:B=8:GOSUB*MAKE_S
  88. 10360  PUT@(104-WINDOW(0),157-WINDOW(1))-(111-WINDOW(0),164-WINDOW(1)),ICN_UP&
  89. 10370  PUT@(104-WINDOW(0),172-WINDOW(1))-(111-WINDOW(0),179-WINDOW(1)),ICN_DW&
  90. 10379 '  ディスク
  91. 10390 LINE(123,40)-STEP(18,39),PSET,,B
  92. 10410 LINE(144,40)-STEP(63,39),PSET,,B
  93. 10430 LINE(210,40)-STEP(18,39),PSET,,B
  94. 10439 '  選択したファイル名
  95. 10450 LINE(123,115)-STEP(89,15),PSET,,B
  96. 10459 '  取消
  97. 10460  BOX(2,0)=120:BOX(2,1)=138:BOX(2,2)=168:BOX(2,3)=138+12+6:B=2:GOSUB*FR_EL1
  98. 10470  SYMBOL(BOX(2,0)+3,BOX(2,1)+3)," 取 消 ",.75!,.75!
  99. 10479 '  実行
  100. 10480  BOX(1,0)=160:BOX(1,1)=162:BOX(1,2)=160+6*(11+1):BOX(1,3)=180:B=1:GOSUB*FR_EL2
  101. 10490  SYMBOL(BOX(1,0)+3,BOX(1,1)+3),"   実 行   ",.75!,.75!
  102. 10499 '  rex_uty
  103. 10500 *GET_F_I
  104. 10510 IF FILENUM=0 THEN
  105. 10520   IF GCRDNBUF$="" THEN
  106. 10530     IF CRDCODE=0 THEN
  107. 10598        '  rex_utyによる情報の取得
  108. 10599        ' カレント・ディスク
  109. 10600        CRDCODE=CALLM(0,1)
  110. 10615     ENDIF
  111. 10629      ' カレント・ディレクトリの取得
  112. 10630      GCRDNBUF$=SPACE$(65)
  113. 10640      RET&=CALLM(0,2,CRDCODE,VARPTR(GCRDNBUF$))
  114. 10650      GCRDNBUF$=LEFT$(GCRDNBUF$,INSTR(GCRDNBUF$," ")-1)
  115. 10659      '  ディレクトリ ルートを除く
  116. 10660     FOR I=LEN(GCRDNBUF$) TO 1 STEP -1
  117. 10670       IF MID$(GCRDNBUF$,I,1)="\" THEN
  118. 10680          DIR$=RIGHT$(GCRDNBUF$,LEN(GCRDNBUF$)-I)
  119. 10690          IF DIR$="" THEN ROOT=0 ELSE ROOT=-1
  120. 10691          I=1
  121. 10694       ENDIF
  122. 10695     NEXT
  123. 10696   ENDIF
  124. 10699    ' ファイル名の探索
  125. 10700    '  ファイル系関数の初期化
  126. 10705    FILEOFFSET=0:FILEN=0
  127. 10710    SEARCHFILE$="????????.???"+CHR$(0):SEARCHFILE&=VARPTR(SEARCHFILE$)
  128. 10719    '  ファイル数は限界がわからないので、とりあえず1000個分用意
  129. 10720   FOR I=0 TO 999
  130. 10730      FILEN$(I)=SPACE$(14)
  131. 10740      RET&=CALLM(0,0,VARPTR(SEARCHFILE$),VARPTR(FILEN$(I)),16,SGN(I))
  132. 10750      IF RET& THEN FILENUM=I:I=999
  133. 10755   NEXT
  134. 10759    ' ファイル名のソート
  135. 10760   IF FILENUM>1 THEN
  136. 10761     FOR I=1 TO FILENUM-1
  137. 10770        IF FILEN$(I-1)>FILEN$(I)THEN SWAP FILEN$(I-1),FILEN$(I):I=I+(I>1)*2
  138. 10774     NEXT
  139. 10775   ENDIF
  140. 10780    IF DIRBACK$>"" THEN FILEOFFSET=SEARCH(FILEN$,DIRBACK$)+ROOT-FILENBACK:DIRBACK$="":FILENBACK=0
  141. 10781    IF FILENUM+ROOT<FILEOFFSET+10 THEN FILEOFFSET=FILENUM+ROOT-10
  142. 10782    IF FILEOFFSET<0 THEN FILEOFFSET=0
  143. 10785 ENDIF
  144. 10799 '  ディスク
  145. 10800  SYMBOL(160,43),AKCNV$(CHR$(CRDCODE)),2,2
  146. 10819 '  ディレクトリ表示
  147. 10820  LINE(8+1,20+1)-STEP(89-2,17-2),PSET,7,BF
  148. 10830  SYMBOL(17,23),DIR$,.75!,.75!
  149. 10869 ' ファイル
  150. 10870  GOSUB*FILE_D
  151. 10871  IF B<>15 THEN GOSUB*BAR_D
  152. 10899 '  クリック待ち
  153. 10900 *WAIT_M
  154. 10905    NUL=MOUSE(9):NUL=MOUSE(10)
  155. 10910   FOR I=0 TO BOXNUM
  156. 10920      PANDB=FNPB(I)
  157. 10930      IF PANDB THEN B=I:I=BOXNUM
  158. 10935   NEXT
  159. 10936      'PRINT "point and box";PANDB,"in box";B
  160. 10940     IF MOUSE(2,1) THEN MODE=1:GOTO*WIN_CLOSE
  161. 10950   IF MOUSE(2,0)=0 THEN GOSUB*MOUSE:GOTO*WAIT_M
  162. 10960    IF PANDB THEN
  163. 10961       PANDB=0:PBBACK=0
  164. 10970       ON B+1 GOTO *WIN_CLOSE,*GO,*STOP,*SEL,*WRITE,*ROLL_BAR,*BAR_BACK,*RB_UP,*RB_DOWN,*RB_DUMMY,*UP,*DOWN,*LEFT,*RIGHT,*CHENGE,*WIN_MOVE,*WIN_DUMMY
  165. 10975    ENDIF
  166. 10979 '  ウィンドウ範囲外の処理とくに無いので
  167. 10980 WHILE MOUSE(2,0):WEND:GOTO*WAIT_M
  168. 10999 '
  169. 11999 '  ファイル名描画
  170. 12000 *FILE_D
  171. 12004  LINE(9,41)-STEP(87,141),PSET,7,BF
  172. 12005    IF FILENUM<1 THEN *BAR_D
  173. 12006    IF 9<FILENUM+ROOT THEN J=9 ELSE J=FILENUM+ROOT-1
  174. 12010   FOR I=0 TO J
  175. 12020     IF ROOT AND I+FILEOFFSET=0 THEN
  176. 12030        FILEN$="<<親ディレクトリ >>"
  177. 12031      ELSE
  178. 12040        FILEN$=FILEN$(I-ROOT+FILEOFFSET)
  179. 12050       IF LEFT$(FILEN$,1)="D" THEN
  180. 12060          FILEN$="<"+MID$(FILEN$,2,12)+">"
  181. 12061        ELSE
  182. 12065          P=INSTR(3,FILEN$,".")-2
  183. 12066         IF 0<P THEN 
  184. 12070            FILEN$=" "+MID$(FILEN$,2,P)+SPACE$(9-P)+MID$(FILEN$,P+3,3)
  185. 12071          ELSE
  186. 12072            FILEN$=" "+MID$(FILEN$,2,8)
  187. 12073         ENDIF
  188. 12074       ENDIF
  189. 12075     ENDIF
  190. 12077       IF FILEN-1<>I+FILEOFFSET THEN
  191. 12079          'LINE(9,41+14*I)-STEP(87,13),PSET,7,BF
  192. 12080          SYMBOL(8+3,40+3+14*I),FILEN$,.75!,.75!
  193. 12081       ELSE
  194. 12082          LINE(9,41+14*I)-STEP(87,15),PSET,,BF
  195. 12083          SYMBOL(8+3,40+3+14*I),FILEN$,.75!,.75!,7
  196. 12084       ENDIF
  197. 12085   NEXT
  198. 12086 RETURN
  199. 12099 '  ロール・バー描画
  200. 12100 *BAR_D
  201. 12101  '  Bを壊すので
  202. 12102  BBACK=B:B=5
  203. 12105  IF FILENUM<1 THEN FILELEN=0 ELSE FILELEN!=112/(FILENUM+ROOT)
  204. 12110  BOX(B,1)=41+FILELEN!*FILEOFFSET
  205. 12115  IF FILENUM+ROOT>10 THEN BOX(B,3)=BOX(B,1)+FILELEN!*10-1 ELSE BOX(B,3)=152
  206. 12130  LINE(100,40)-(115,BOX(B,1)-1),PSET,,BF,%9
  207. 12140  LINE(100,BOX(B,1)-1)-(115,BOX(B,3)+1),PSET,,BF,7
  208. 12150  LINE(100,BOX(B,3)+1)-(115,153),PSET,,BF,%9
  209. 12155  GOSUB*MAKE_S
  210. 12159 '  帰る前にBを復元(*RB_UP、*RB_DOWN)
  211. 12160 SWAP B,BBACK:RETURN
  212. 12199 '  ウインドウ終了処理ルーチン
  213. 12200 *WIN_END
  214. 12210    PUT@A(WININF(0),WININF(1))-(WININF(2)+WININF(0),WININF(3)+WININF(1)),WINBUF
  215. 12220    ERASE WINBUF,FILEN$,FILEN:WINDOW(0,0)-(639,479):RETURN
  216. 12299 '
  217. 12300 *WIN_C
  218. 13999 '  ウィンドウ消去
  219. 14000 *WIN_CLOSE
  220. 14005  IF MODE THEN MOUSE 1,WININF(0)+8,WININF(1)+8,1
  221. 14010 *WCLOOP
  222. 14019 '  情報のくいちがいが無いように念のため
  223. 14020  PANDB=FNPB(0)
  224. 14030  IF PANDB<>PBBACK THEN PBBACK=PANDB:LINE(2,2)-(13,13),XOR,%7,BF
  225. 14039 '  コンパイラではmouseに式が使えない& if~then while~は×
  226. 14040  IF MODE   THEN IF MOUSE(2,1) GOTO *WCLOOP
  227. 14041  IF MODE=0 THEN IF MOUSE(2,0) GOTO *WCLOOP
  228. 14045  MODE=0
  229. 14050 IF PANDB THEN FILENAME$="":GOTO*WIN_END ELSE GOTO*WAIT_M
  230. 14099 '  ウィンドウ移動
  231. 14100 *WIN_MOVE
  232. 14102  XOLD=MOUSE(4,0):YOLD=MOUSE(5,0)
  233. 14103  MOUSE 4,XOLD-WININF(0),YOLD-WININF(1),639-WININF(0)-WININF(2)+XOLD,479-WININF(1)-WININF(3)+YOLD
  234. 14104  MOUSE 1,XOLD,YOLD,0
  235. 14109  LINE(0,0)-(WININF(2),WININF(3)),XOR,7,B
  236. 14110 WHILE MOUSE(2,0) AND NOT MOUSE(2,1)
  237. 14119    X=MOUSE(0)-XOLD:Y=MOUSE(1)-YOLD
  238. 14120   IF X<>XBACK OR Y<>YBACK THEN
  239. 14121      LINE(XBACK,YBACK)-(WININF(2)+XBACK,WININF(3)+YBACK),XOR,7,B
  240. 14122      LINE(X    ,Y    )-(WININF(2)+X    ,WININF(3)+Y    ),XOR,7,B
  241. 14125      XBACK=X:YBACK=Y
  242. 14130   ENDIF
  243. 14140 WEND
  244. 14141  LINE(X,Y)-(WININF(2)+X,WININF(3)+Y),XOR,7,B
  245. 14143  MOUSE 4,0,0,639,479
  246. 14145  XBACK=0:YBACK=0
  247. 14160 IF (X OR Y)AND MOUSE(2,1)=0 THEN
  248. 14165    WININF(0)=WININF(0)+X:WININF(1)=WININF(1)+Y
  249. 14170    PUT@A(-WINDOW(0),-WINDOW(1))-(WININF(2)-WINDOW(0),WININF(3)-WINDOW(1)),WINBUF
  250. 14175    MOUSE 1,,,1
  251. 14179    GOTO*WIN_DASH
  252. 14180 ENDIF
  253. 14185  MOUSE 1,XOLD,YOLD,1
  254. 14186  WHILE MOUSE(2,0):WEND
  255. 14190 GOTO*WAIT_M
  256. 14199 '  ダミーです
  257. 14200 *ROLL_BAR
  258. 14290 GOTO*WAIT_M
  259. 14299 '  ダミーです
  260. 14300 *BAR_BACK
  261. 14390 GOTO*WAIT_M
  262. 14399 '  上方向ファイル表示
  263. 14400 *RB_UP
  264. 14410   WHILE MOUSE(2,0)
  265. 14420     IF FNPB(B) THEN
  266. 14430        IF REV=0 THEN GOSUB*ERASE_S:REV=1
  267. 14440       IF 0<FILEOFFSET THEN
  268. 14450          FILEOFFSET=FILEOFFSET-1
  269. 14460          GOSUB*BAR_D:GOSUB*FILE_D
  270. 14465       ENDIF
  271. 14466      ELSE
  272. 14470        IF REV THEN GOSUB*MAKE_S:REV=0
  273. 14475     ENDIF
  274. 14476   WEND
  275. 14480    IF REV THEN GOSUB*MAKE_S:REV=0
  276. 14490 GOTO*WAIT_M
  277. 14499 '  下方向ファイル表示
  278. 14500 *RB_DOWN
  279. 14510   WHILE MOUSE(2,0)
  280. 14520     IF FNPB(B) THEN
  281. 14530        IF REV=0 THEN GOSUB*ERASE_S:REV=1
  282. 14540       IF FILENUM+ROOT>FILEOFFSET+10 THEN
  283. 14550          FILEOFFSET=FILEOFFSET+1
  284. 14560          GOSUB*BAR_D:GOSUB*FILE_D
  285. 14565       ENDIF
  286. 14566      ELSE
  287. 14570        IF REV THEN GOSUB*MAKE_S:REV=0
  288. 14575     ENDIF
  289. 14576   WEND
  290. 14580    IF REV THEN GOSUB*MAKE_S:REV=0
  291. 14590 GOTO*WAIT_M
  292. 14599 '  ファイル選択動作
  293. 14600 *SEL
  294. 14610  FILENBACK=FILEN-FILEOFFSET
  295. 14615  X=BOX(3,0)+1:Y=BOX(3,1)-13:Z=BOX(3,2)-1:W=BOX(3,1)+2
  296. 14619 '  一度は通るwhileの代わり
  297. 14620   *SEL_LOOP
  298. 14630     IF FNPB(3) THEN
  299. 14640        F=MOUSE(1)+WINDOW(1)-BOX(3,1)-3
  300. 14641        IF 0=<F AND F MOD 14<12 THEN FILEN=F\14+1 ELSE CLICKT=-1
  301. 14642        IF FILEN<1 OR 10<FILEN OR FILENUM+ROOT<FILEN THEN FILEN=0
  302. 14645      ELSE
  303. 14650        FILEN=0
  304. 14655     ENDIF
  305. 14660      IF FILENBACK<>FILEN THEN
  306. 14670         IF FILEN THEN LINE(X,Y+FILEN*14)-(Z,W+FILEN*14),XOR,%7,BF
  307. 14675         IF 1=<FILENBACK AND FILENBACK=<10 THEN LINE(X,Y+FILENBACK*14)-(Z,W+FILENBACK*14),XOR,%7,BF
  308. 14680         FILENBACK=FILEN:CLICKT=-1
  309. 14690      ENDIF
  310. 14695   IF MOUSE(2,0) THEN *SEL_LOOP
  311. 14696    FILENBACK=0
  312. 14699 '  簡単なダブルクリック処理
  313. 14700   IF FILEN THEN
  314. 14705      FILEN=FILEN+FILEOFFSET
  315. 14710     IF TIME MOD 3600=CLICKT THEN
  316. 14720        IF FILEN=1 AND ROOT THEN *UP_P
  317. 14721        IF LEFT$(FILEN$(FILEN-1-ROOT),1)="D" THEN *DOWN_P
  318. 14722        IF LEFT$(FILEN$(FILEN-1-ROOT),1)="F" THEN *WIN_END
  319. 14725      ELSE
  320. 14730        CLICKT=TIME MOD 3600
  321. 14740       IF LEFT$(FILEN$(FILEN-1-ROOT),1)="F" THEN
  322. 14750          IF FILENAME$>"" THEN LINE(123,115)-STEP(89,15),PSET,,BF,7
  323. 14760          FILENAME$=MID$(FILEN$(FILEN-1-ROOT),2,INSTR(1,FILEN$(FILEN-1-ROOT)," ")-2)
  324. 14765          SYMBOL(123+3,115+2),FILENAME$,.75!,.75!
  325. 14775       ENDIF
  326. 14776     ENDIF
  327. 14780    ELSE
  328. 14785      CLICKT=-1
  329. 14790      IF FILENAME$>"" THEN LINE(123,115)-STEP(89,15),PSET,,BF,7
  330. 14795   ENDIF
  331. 14799 '  実行
  332. 14800 *GO
  333. 14810   WHILE MOUSE(2,0)
  334. 14820      PANDB=FNPB(1)
  335. 14830     IF PANDB<>PBBACK THEN
  336. 14840        PBBACK=PANDB
  337. 14849        X=BOX(1,0)+1:Y=BOX(1,1)+1:Z=BOX(1,2)-1:W=BOX(1,3)-1
  338. 14850        CONNECT(X+2,Y)-(Z-2,Y)-(Z,Y+2)-(Z,W-2)-(Z-2,W)-(X+2,W)-(X,W-2)-(X,Y+2)-(X+2,Y),%7,XOR,F
  339. 14855     ENDIF
  340. 14860   WEND
  341. 14870    IF PANDB THEN CONNECT(X+2,Y)-(Z-2,Y)-(Z,Y+2)-(Z,W-2)-(Z-2,W)-(X+2,W)-(X,W-2)-(X,Y+2)-(X+2,Y),%7,XOR,F
  342. 14879 '  この行は前の行の前に置いても構わない
  343. 14880    IF PANDB AND FILENAME$>"" THEN *WIN_END ELSE GOTO*WAIT_M
  344. 14899 '
  345. 14900 '*stop
  346. 14999 '
  347. 15000 *UP
  348. 15005    X=BOX(B,0)+1:Y=BOX(B,1)+1:Z=BOX(B,2)-1:W=BOX(B,3)-1
  349. 15010   WHILE MOUSE(2,0)
  350. 15020      PANDB=FNPB(B)
  351. 15030     IF PANDB<>PBBACK THEN PBBACK=PANDB:LINE(X,Y)-(Z,W),XOR,%7,BF
  352. 15035   WEND
  353. 15036    IF PANDB THEN LINE(X,Y)-(Z,W),XOR,%7,BF
  354. 15039 IF PANDB=0 OR ROOT=0 THEN *WAIT_M
  355. 15040 *UP_P
  356. 15051  DIRBACK$="D"+DIR$+SPACE$(13-LEN(DIR$))
  357. 15052  FILENP=SEARCH(FILEN,0)-1
  358. 15053  IF FILENP=-1 THEN FILENP=0
  359. 15054  SWAP FILENBACK,FILEN(FILENP)
  360. 15055  IF FILENBACK=0 THEN FILENBACK=3 ELSE FILENBACK=FILENBACK-1
  361. 15060  GCRDNBUF$=".."+CHR$(0)
  362. 15070  CALLM 0,4,VARPTR(GCRDNBUF$)
  363. 15080  GCRDNBUF$="":FILENUM=0
  364. 15090 GOTO*GET_F_I
  365. 15099 '
  366. 15100 *DOWN
  367. 15110 WHILE MOUSE(2,0)
  368. 15120      PANDB=FNPB(B)
  369. 15130     IF PANDB<>PBBACK THEN PBBACK=PANDB:GOSUB*FR_EL_RV
  370. 15135   WEND
  371. 15136    IF PANDB THEN GOSUB*FR_EL_RV
  372. 15139 IF PANDB=0 OR FILEN=0 OR LEFT$(FILEN$(FILEN),1)<>"D" THEN *WAIT_M
  373. 15140 *DOWN_P
  374. 15145  FILENP=SEARCH(FILEN,0)
  375. 15150  FILEN(FILENP)=FILEN-FILEOFFSET:FILEN(FILENP+1)=0
  376. 15160  GCRDNBUF$=MID$(FILEN$(FILEN-1-ROOT),2,INSTR(FILEN$(FILEN-1-ROOT)," ")-2)+CHR$(0)
  377. 15170  CALLM 0,4,VARPTR(GCRDNBUF$)
  378. 15180  GCRDNBUF$="":FILENUM=0
  379. 15190 GOTO*GET_F_I
  380. 15199 '
  381. 17986 *RB_DUMMY
  382. 17987 *WIN_DUMMY
  383. 17990 *STOP
  384. 17992 *WRITE
  385. 17995 *LEFT
  386. 17996 *RIGHT
  387. 17997 *CHENGE
  388. 17998 *DUMMY WHILE MOUSE(2,0):WEND:GOTO*WAIT_M
  389. 17999 '  描画関連サブルーチン
  390. 18000 *FR_EL1 
  391. 18010  X=BOX(B,0):Y=BOX(B,1):Z=BOX(B,2):W=BOX(B,3)':I=4:GOSUB*FR_EL
  392. 18020  CONNECT(X,Y+4)-(X+1,Y+1)-(X+4,Y)-(Z-4,Y)-(Z-1,Y+1)-(Z,Y+4)-(Z,W-4)-(Z-1,W-1)-(Z-4,W)-(X+4,W)-(X+1,W-1)-(X,W-4)-(X,Y+4)
  393. 18025 RETURN
  394. 18029 '
  395. 18030 *FR_EL2 
  396. 18040    X=BOX(B,0):Y=BOX(B,1):Z=BOX(B,2):W=BOX(B,3)':I=4:GOSUB*FR_EL
  397. 18045    CONNECT(X,Y+4)-(X+1,Y+1)-(X+4,Y)-(Z-4,Y)-(Z-1,Y+1)-(Z,Y+4)-(Z,W-4)-(Z-1,W-1)-(Z-4,W)-(X+4,W)-(X+1,W-1)-(X,W-4)-(X,Y+4)
  398. 18049    DEF PEN 0,2
  399. 18050    X=BOX(B,0)-3:Y=BOX(B,1)-3:Z=BOX(B,2)+2:W=BOX(B,3)+2:I=7:GOSUB*FR_EL
  400. 18051    DEF PEN 0,1
  401. 18055 RETURN
  402. 18059 '
  403. 18060 *FR_EL_RV
  404. 18065    X=BOX(B,0)+1:Y=BOX(B,1)+1:Z=BOX(B,2)-1:W=BOX(B,3)-1
  405. 18070    CONNECT(X+2,Y)-(Z-2,Y)-(Z,Y+2)-(Z,W-2)-(Z-2,W)-(X+2,W)-(X,W-2)-(X,Y+2)-(X+2,Y),%7,XOR,F
  406. 18075 RETURN
  407. 18079 '
  408. 18080 *FR_EL
  409. 18082    LINE(X+I,Y)-(Z-I,Y),PSET:CIRCLE (Z-I,Y+I),I,,,.75!,0
  410. 18084    LINE(Z,Y+I)-(Z,W-I),PSET:CIRCLE (Z-I,W-I),I,,,0,.25!
  411. 18086    LINE(Z-I,W)-(X+I,W),PSET:CIRCLE (X+I,W-I),I,,,.25!,.5!
  412. 18088    LINE(X,W-I)-(X,Y+I),PSET:CIRCLE (X+I,Y+I),I,,,.5!,.75!
  413. 18090 RETURN
  414. 18099 '
  415. 18100 *MAKE_S
  416. 18110    X=BOX(B,0):Y=BOX(B,1):Z=BOX(B,2):W=BOX(B,3)
  417. 18120    CONNECT(Z,Y+1)-(Z,W)-(X+1,W)-(X+2,W-1)-(Z-1,W-1)-(Z-1,Y+2)
  418. 18125 RETURN
  419. 18129 '
  420. 18130 *ERASE_S
  421. 18140    X=BOX(B,0):Y=BOX(B,1):Z=BOX(B,2):W=BOX(B,3)
  422. 18150    CONNECT(Z,Y+1)-(Z,W)-(X+1,W)-(X+2,W-1)-(Z-1,W-1)-(Z-1,Y+2),7
  423. 18155 RETURN
  424. 18159 '
  425. 29999 '  おまけ
  426. 30000 *MOUSE 
  427. 30020    MBX=SGN(MOUSE(9)\32):MBY=SGN(MOUSE(10)\28)
  428. 30030   IF MBX OR MBY THEN
  429. 30040    IF MBX THEN MBX=(MBX+1)\2 ELSE MBX=MB AND 1
  430. 30050    IF MBY THEN MBY= MBY+1    ELSE MBY=MB AND 2
  431. 30055 '
  432. 30060    IF MB<>MBX+MBY THEN MB=MBX+MBY:MOUSE 2,M_AND$(MB),M_DOT$(MB),MBX*15,MBY*7.5!
  433. 30080   ENDIF
  434. 30090 RETURN
  435. 30095 '
  436.